package com.example.prom.strategy.excel;

import com.alibaba.excel.write.metadata.style.WriteCellStyle;
import com.alibaba.excel.write.metadata.style.WriteFont;
import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
import org.apache.poi.ss.usermodel.*;

import java.util.List;

/**
 * @author dangwen1
 * @date 2021年12月03日 10:26
 * @description 自定义表头样式，及内容样式，可以和其他的策略结合使用
 */
public class CustomCellStyleStrategy extends HorizontalCellStyleStrategy {
    public CustomCellStyleStrategy(WriteCellStyle headWriteCellStyle, List<WriteCellStyle> contentWriteCellStyleList) {
        super(headWriteCellStyle, contentWriteCellStyleList);
    }

    public CustomCellStyleStrategy(){
        super(getHeadStyle(), getContentStyle());
    }

    public static WriteCellStyle getHeadStyle(){
        // 头的策略
        WriteCellStyle headWriteCellStyle = new WriteCellStyle();
        // 背景颜色
        headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
        headWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // 字体
        WriteFont headWriteFont = new WriteFont();
        headWriteFont.setFontName("黑体");//设置字体名字
        headWriteFont.setFontHeightInPoints((short)12);//设置字体大小
        headWriteFont.setBold(true);//字体加粗
        headWriteFont.setColor(IndexedColors.RED.getIndex());
        headWriteCellStyle.setWriteFont(headWriteFont); // 在样式用应用设置的字体
        // 样式
        headWriteCellStyle.setBorderBottom(BorderStyle.THIN);// 设置底边框
        headWriteCellStyle.setBottomBorderColor((short) 0);// 设置底边框颜色
        headWriteCellStyle.setBorderLeft(BorderStyle.THIN);  // 设置左边框
        headWriteCellStyle.setLeftBorderColor((short) 0);// 设置左边框颜色
        headWriteCellStyle.setBorderRight(BorderStyle.THIN);// 设置右边框
        headWriteCellStyle.setRightBorderColor((short) 0);// 设置右边框颜色
        headWriteCellStyle.setBorderTop(BorderStyle.THIN);// 设置顶边框
        headWriteCellStyle.setTopBorderColor((short) 0); // 设置顶边框颜色
        headWriteCellStyle.setWrapped(true);  // 设置自动换行
        headWriteCellStyle.setFillBackgroundColor(IndexedColors.BLUE.getIndex()); // 没有什么效果
        headWriteCellStyle.setFillForegroundColor(IndexedColors.YELLOW.getIndex());// 前景色就是head的背景色
        headWriteCellStyle.setHorizontalAlignment(HorizontalAlignment. CENTER);// 设置水平对齐的样式为居中对齐
        headWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);  // 设置垂直对齐的样式为居中对齐
        //        headWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
        return headWriteCellStyle;
    }

    public static WriteCellStyle getContentStyle(){
        // 内容的策略
        WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
        // 背景绿色
        // 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
        contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE1.getIndex());
        contentWriteCellStyle.setFillPatternType(FillPatternType.SOLID_FOREGROUND);
        // 设置字体
        WriteFont contentWriteFont = new WriteFont();
        contentWriteFont.setFontHeightInPoints((short) 9);//设置字体大小
        contentWriteFont.setFontName("微软雅黑"); //设置字体名字
        contentWriteCellStyle.setWriteFont(contentWriteFont);//在样式用应用设置的字体
        // 设置样式
        contentWriteCellStyle.setBorderBottom(BorderStyle.THIN);//设置底边框
        contentWriteCellStyle.setBottomBorderColor((short) 0);//设置底边框颜色
        contentWriteCellStyle.setBorderLeft(BorderStyle.THIN);  //设置左边框
        contentWriteCellStyle.setLeftBorderColor((short) 0);//设置左边框颜色
        contentWriteCellStyle.setBorderRight(BorderStyle.THIN);//设置右边框
        contentWriteCellStyle.setRightBorderColor((short) 0);//设置右边框颜色
        contentWriteCellStyle.setBorderTop(BorderStyle.THIN);//设置顶边框
        contentWriteCellStyle.setTopBorderColor((short) 0); ///设置顶边框颜色
        contentWriteCellStyle.setHorizontalAlignment(HorizontalAlignment.LEFT);// 水平居中
        contentWriteCellStyle.setVerticalAlignment(VerticalAlignment.CENTER);// 垂直居中
        contentWriteCellStyle.setWrapped(true); //设置自动换行
//        contentWriteCellStyle.setDataFormat((short)49);//设置单元格格式是：文本格式，方式长数字文本科学计数法
        // contentWriteCellStyle.setShrinkToFit(true);//设置文本收缩至合适
        return contentWriteCellStyle;
    }


}
